package com.xebest.web.mapper.write;

import com.xebest.web.form.XeVenCarSendForm;
import com.xebest.web.model.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * 物流信息操作
 *
 * @author 赵盼飞
 */
@Repository
public interface XeVenOrderLogisticsWriteMapper {

    /**
     * 根据物流单号删除物流信息
     *
     * @author 赵盼飞
     */
    int deleteLogisticsByLogtsCode(String logtsCode);

    /**
     * 添加物流信息
     *
     * @author 赵盼飞
     */
    int insertLogistics(XeVenOrderLogistics xeVenOrderLogistics);

    /**
     * 根据物流单号修改物流信息
     *
     * @author 赵盼飞
     */
    int updateLogisticsByLogtsCode(XeVenOrderLogistics xeVenOrderLogistics);

    /**
     * 添加物流详情
     *
     * @author 赵盼飞
     */
    int insertLogisticsDetail(XeVenOrderLogisticsDetail logisticsDetail);

    /**
     * 根据物流单号更新物流详情
     *
     * @author 赵盼飞
     */
    int updateLogisticsDetailLogtsCode(XeVenOrderLogisticsDetail logisticsDetail);

    /**
     * 保存车辆信息
     *
     * @author 赵盼飞
     */
    int saveCarInfo(XeVenCarEntity carEntity);

    /**
     * 保存派车信息
     *
     * @author 赵盼飞
     */
    int saveSendCarInfo(XeVenCarSendEntity carSendEntity);

    /**
     * 保存已使用过的车记录
     *
     * @author 赵盼飞
     */
    int saveCarUsesRecord(XeVenCarUsesRecordEntity carUsesRecordEntity);

    /**
     * 保存车辆承运线路
     *
     * @author 赵盼飞
     */
    int saveCarLines(XeVenCarLinesEntity carLinesEntity);

    /**
     * 批量保存派车信息
     *
     * @author 赵盼飞
     */
    int saveBathSendCarInfo(@Param("carSendEntityList") List<XeVenCarSendEntity> carSendEntityList);

    /**
     * 根据物流单号批量更新物流状态
     *
     * @author 赵盼飞
     */
    int updateBathLogisticsByLogtsCode(XeVenOrderLogistics orderLogistics);

    /**
     * 根据物流单号查询SendCarInfo信息
     *
     * @author 赵盼飞
     */
    Map<String, Object> selectSendCarInfoByLogtCode(String logtCode);

    /**
     * 更新SendCarInfo信息
     *
     * @author 赵盼飞
     */
    int updateSendCarInfo(XeVenCarSendEntity carSendEntity);

    /**
     * 根据物流单号查询CarUsesRecord信息
     *
     * @author 赵盼飞
     */
    Map<String, Object> selectCarUsesRecordByLogtCode(XeVenCarUsesRecordEntity carUsesRecordEntity);

    /**
     * 根据物流单号批量查询CarUsesRecord信息
     *
     * @author 赵盼飞
     */
    List<Map<String, Object>> selectSendCarInfoByLogtCodes(@Param("logtCodeArr") String[] logtCodeArr);

    /**
     * 批量更新XeVenCarSend
     *
     * @author 赵盼飞
     */
    int updateBathSendCarInfo(XeVenCarSendEntity carSendEntityList);

    /**
     * 批量修改物流单明细
     *
     * @author 赵盼飞
     */
    int updateBathLogisticsDetailLogtsCode(XeVenOrderLogisticsDetail orderLogisticsDetail);

    /**
     * 批量添加物流单明细
     *
     * @author 赵盼飞
     */
    int insertBathLogisticsDetail(@Param("logisticsDetailList") List<XeVenOrderLogisticsDetail> orderLogisticsDetailList);

    /**
     * 根据物流单删除车辆信息
     *
     * @author 赵盼飞
     */
    int deleteXeVenCarSendByLogtCode(XeVenCarSendForm form);

    /**
     * 根据物流单删除物流信息
     *
     * @author 赵盼飞
     */
    int deleteBathLogisticsDetailLogtsCode(XeVenCarSendForm form);

    /**
     * 确认接货
     *
     * @author 袁世林
     */
    void confirmDelivery(@Param("logtsCode") String logtsCode);

    /**
     * 修改派车时，将接货状态重置为未接货
     *
     * @author 袁世林
     */
    void updateReceiptStatusByLogtsCode(@Param("logtsCode") String logtsCode);

}